package org.test.jiazi_1.common.exception;

import lombok.Getter;

/**
 * 自定义业务异常类
 * 用于处理业务逻辑中出现的异常情况
 */
@Getter
public class BusinessException extends RuntimeException {

    /**
     * 错误状态码
     */
    private final int code;

    /**
     * 错误提示信息
     */
    private final String message;

    /**
     * 附加数据（可选）
     */
    private Object data;

    /**
     * 构造方法：仅包含错误码和错误信息
     *
     * @param code    错误码
     * @param message 错误信息
     */
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
        this.message = message;
    }

    /**
     * 构造方法：包含错误码、错误信息和附加数据
     *
     * @param code    错误码
     * @param message 错误信息
     * @param data    附加数据
     */
    public BusinessException(int code, String message, Object data) {
        super(message);
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 构造方法：包含错误码、错误信息和原始异常
     *
     * @param code    错误码
     * @param message 错误信息
     * @param cause   原始异常
     */
    public BusinessException(int code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
        this.message = message;
    }

    /**
     * 设置附加数据
     *
     * @param data 附加数据
     * @return 当前异常对象
     */
    public BusinessException setData(Object data) {
        this.data = data;
        return this;
    }
}
